home *** CD-ROM | disk | FTP | other *** search
/ Pascal Super Library / Pascal Super Library (CW International)(1997).bin / LIBRARY / SLTPU70C / FILEDEF.REF < prev    next >
Text File  |  1993-09-15  |  25KB  |  640 lines

  1.  
  2. The follwing is a reference of the data types provided by FILEDEF.TPU.
  3. Note: do not attempt to compile this file.  Doing so may cause the
  4. updated FILEDEF.TPU file to be incompatible with the other TPU files.
  5.  
  6.  
  7. const logsize   =  75;  { size of last caller log }
  8.       chatsize  =   4;  { chat queue size - 1 }
  9.       ulistmax  =  50;  { upload list size }
  10.       maxproto  =  15;  { number of external protocols }
  11.  
  12.  
  13. const { Message File Constants }
  14.       indexsize = 1024;       { size of index hash table }
  15.       blocksize = 250;        { text block size }
  16.  
  17.  
  18. const configspec  = 'CONFIG.SL2';   { Configuration Info }
  19.       nodesspec   = 'NODES.SL2';    { Node Information }
  20.  
  21.       chatspec    = 'CHAT.SL2';     { Chat File }
  22.       logspec     = 'LOG.SL2';      { Caller Log }
  23.  
  24.       subspec     = 'SUBBOARD.SL2'; { Subboard Definitions }
  25.       dirspec     = 'FILEDIR.SL2';  { UL/DL Directory Definitions }
  26.       doorspec    = 'DOORS.SL2';    { External Program Definitions }
  27.  
  28.       msysspec: string[80]
  29.                   = 'STRINGS.SYS';  { Offline Message Strings }
  30.  
  31.       ulistspec   = 'UPLIST.SL2';   { Batch Upload Description List }
  32.  
  33.       configpath: string[60] = '';
  34.         { path to CONFIG file }
  35.  
  36.  
  37. Type  { -- Preliminary Type Definitions ------------------------------------ }
  38.  
  39.      RSbaud = (B110,B150,B300,B600,B1200,B2400,B4800,B9600,B19200,B38400,
  40.                b7200,b12000,b14400,b16800);
  41.      cmpresult = (Less,Equal,Greater);
  42.      comparefunction = function (p1,p2: pointer): cmpresult;
  43.  
  44.      ansitype = (GENERIC,PROCOMM,STANDARD);
  45.      helplevel = (EXPERT,INTERMEDIATE,NOVICE);
  46.  
  47.      IxType = (SEQ,UID,MAIL);
  48.        { index type, seqential/universal/mail }
  49.  
  50.      filetype = (CONFIGF,NODESF,CHATF);
  51.      fileset = set of filetype;
  52.  
  53.      timetype = record   { time }
  54.        hour: byte;
  55.        minute: byte;
  56.      end;
  57.  
  58.      datetype = record   { date }
  59.        year: byte;
  60.        month: byte;
  61.        day: byte;
  62.      end;
  63.  
  64.      pwtype = array[1..3] of byte;  { 3-byte password }
  65.  
  66.      maillogtype = (MLOFF,MLON,MLTAP);
  67.  
  68.      attribtype = 1..24;
  69.      attribset = set of attribtype;    { access attribute set A-X }
  70.  
  71.      ProtocolType = (Extern,XSUM,XCRC,X1K,ZMODEM);
  72.      Protocolkind = (SingleFile,MultiFile,Indirect);
  73.      ExProtocol = record
  74.        name: string[40];      { protocol name }
  75.        sendcmd: string[72];   { send command }
  76.        rcvcmd: string[72];    { receive command }
  77.        source: ProtocolType;  { type of protocol }
  78.        extra: string[19];     { expansion room }
  79.      end;
  80.  
  81.      ColorType = (NULLCOLOR,     { no color set }
  82.                   NORMAL,        { normal screen color for most i/o }
  83.                   INVERSE,       { foreground color for input highlighting }
  84.                   BACKGROUND,    { background color for input highlighting }
  85.                   COMCOLOR,      { color for command highlight }
  86.                   SUBCOLOR,      { subboard information }
  87.                   HEADCOLOR,     { color for headings }
  88.                   CHATCOLOR,     { chat mode color }
  89.                   SPECIAL,       { special prompts and messages }
  90.                   ERRCOLOR,      { error and warning messages }
  91.                   ALTCOLOR,      { alt. special color }
  92.                   PROMPTCOLOR ); { colour for prompts }
  93.  
  94.      MsgType = record    { inter-terminal message }
  95.        from: integer;         { node where from }
  96.        name: string[25];      { name of sender }
  97.        message: string[73];   { text of msg }
  98.      end;
  99.  
  100.      AutoDoorType = record   { automatic door }
  101.        command: string[60];
  102.        directory: string[60];
  103.        commtype: byte;
  104.        abort: byte;
  105.        writeprot: boolean;
  106.        dropfile: byte;   { 0=None 1=PCB14 2=PCB12 3=DOOR.SYS 4=DORINFOx.DEF }
  107.        pause: boolean;   { pause after door executes? }
  108.        extra: string[8];
  109.      end;
  110.  
  111.      PortDefType = record   { COM port definition }
  112.        PortType: byte;      { type of port: 0=standard 1=FOSSIL 2=Digiboard }
  113.        BaseAddress: word;   { base address for standard ports }
  114.        IRQ: word;           { interrupt for standard ports }
  115.        Num: byte;           { external port number for FOSSIL/Digi ports }
  116.        extra: string[7];    { extra bytes }
  117.      end;
  118.  
  119.      AccessType = record   { access level set }
  120.        attrib: attribset;    { attributes }
  121.        msglevel: integer;    { message system access level }
  122.        filelevel: integer;   { file system access level }
  123.        ratio: byte;          { download:upload ratio }
  124.        timelimit: integer;   { daily time limit }
  125.        sesslimit: integer;   { per session time limit }
  126.        expiredate: datetype; { expiration date }
  127.      end;
  128.  
  129.      AccessDefType = record
  130.        name: string[20];     { name of access level }
  131.        days: integer;        { # of days added to expiration date }
  132.        a: accesstype;        { access levels }
  133.      end;
  134.  
  135.      FidoAddressType = record
  136.        node,net,zone,point: word;
  137.      end;
  138.  
  139.      AddressType = record    { message address information }
  140.        data: string[40];   { address data }
  141.        atype: byte;        { 0=forward 1=incoming netmail 2=outgoing netmail }
  142.      end;
  143.  
  144.  
  145.  
  146. Type  { -- CONFIG, NODES and CHAT file types ------------------------------- }
  147.  
  148.      configtype = record   { format of CONFIG file }
  149.  
  150.        systemname: string[30]; { the name of the BBS }
  151.        xxtra: string[25];
  152.        node: integer;          { node number this node }
  153.        maxnode: integer;       { total number of active nodes }
  154.        version: integer;       { version of SLBBS program in use }
  155.  
  156.        progpath: string[45];   { path to program files }
  157.        altprogpath: string[45];{ alternate program path }
  158.        datapath: string[45];   { path to data files }
  159.        chatpath: string[45];   { path to chat.bbs }
  160.        textpath: string[45];   { path to text files }
  161.        incpath: string[45];    { path to user include files }
  162.        mailpath: string[45];   { path for MAIL.LOG files }
  163.        alogspec: string[45];   { activity log filespec }
  164.        flogspec: string[45];   { files log filespec [std] }
  165.        logfile: string[45];    { default general log file }
  166.        sysfile: string[45];    { path/filename for pcboard.sys file }
  167.        defaultpw: string[45];  { default password for uploads }
  168.        presshard: byte;        { reserved }
  169.  
  170.        curruser: longint;      { current user ID number }
  171.        currsub: string[8];     { current/last used message area }
  172.        currdir: string[8];     { current/last used file area }
  173.        lastdoor: string[45];   { current/last door menu executed }
  174.        logtime: timetype;      { time current user logged on }
  175.        laston: datetype;       { last logon date of current user }
  176.        remote: boolean;        { set if remote logon }
  177.        rsactive: boolean;      { set if rs port active }
  178.        baudrate: rsbaud;       { caller's actual effective baud rate }
  179.        errorfree: boolean;     { set if error free connect detected }
  180.        ansi: boolean;          { caller's ANSI graphics mode }
  181.        color: boolean;         { caller's color mode indicator }
  182.        timelimit: integer;     { caller's time limit for this session }
  183.        newlogon: boolean;      { set if main program not yet run }
  184.  
  185.        sysavail: boolean;      { set if sysop is available }
  186.        sysopnext: boolean;     { set if sysop will be next login }
  187.        paged: boolean;         { set if sysop was paged }
  188.        superuser: boolean;     { set if superuser key (alt-s) pressed }
  189.  
  190.        newusers: boolean;      { new user registration? }
  191.        reginfo: word;          { registration info to collect? }
  192.        minaccess: byte;        { min. access lev req. for login }
  193.        noquotes: boolean;      { set if Quotes are Off }
  194.        inithelp: helplevel;    { initial help level }
  195.        partreg: boolean;       { collect partial user info? }
  196.  
  197.        comport: byte;          { com port to use }
  198.        bsupport: byte;         { baud rates supported }
  199.        initstr: string[45];    { modem 'remote' init string }
  200.        localstr: string[45];   { modem 'local' init string }
  201.        buffactor: integer;     { output buffer size }
  202.        bufferdoors: boolean;   { buffer DOOR output? }
  203.        modemmsg: boolean;      { true for modem msg baud detect }
  204.        flowcntrl: boolean;     { set for harware cts/dsr flow control }
  205.        lockedbaud: rsbaud;     { baud rate to lock modem at }
  206.        hardbreak: boolean;     { if set, bbs uses hard modem breaks }
  207.  
  208.        directvid: boolean;     { direct screen/BIOS output switch }
  209.        dateformat: byte;       { desired date format }
  210.        timeformat: byte;       { desired time format }
  211.        payback: byte;          { upload time payback }
  212.        romcopy: boolean;       { set for ROM file copies }
  213.        userpriv: boolean;      { set if user lists are private }
  214.        PauseSource: byte;      { source for pause routine (dos/bios/ram) }
  215.  
  216.        command: string[255];   { next command executed by slbbs.exe }
  217.        commtype: byte;         { next command type }
  218.        commdir: string[80];    { default dir for command }
  219.        wp: boolean;            { write protection for command }
  220.        abort: byte;            { abort type for command }
  221.        doorflag: byte;         { program to run on return from door }
  222.        keyflag: boolean;       { set if "press return" desired }
  223.        indoors: byte;          { doors active flag }
  224.  
  225.        relog: boolean;         { relog flag }
  226.        lastevent: integer;     { line number of last event }
  227.        lastday: byte;          { day last event executed }
  228.        nextevent: integer;     { time until next system event (-1=None) }
  229.        eventsoon: boolean;     { set if event scheduled after current session }
  230.        idletime: byte;         { idle time limit }
  231.  
  232.        lastactive: boolean;    { set if lastuser currently logged in }
  233.        host: boolean;          { if set, return to DOS on logout }
  234.        hangup: boolean;        { if set, hang up after each call }
  235.        disablekeys: boolean;   { if set, hot keys are disabled }
  236.  
  237.        AccessDef: array[1..25]
  238.          of AccessDefType;     { access level definitions }
  239.  
  240.        Colorchart: array [NORMAL..PROMPTCOLOR]
  241.          of byte;              { color definitions }
  242.  
  243.        PortDef: array[1..8]
  244.          of PortDefType;       { COM port setup info }
  245.  
  246.        Proto: array[1..MaxProto]
  247.          of exprotocol;        { external protocols setup }
  248.  
  249.        Autodoors: array[1..3] of autodoortype;
  250.  
  251.        MaxRegNode: integer;    { max nodes permitted by reg number }
  252.  
  253.        subboardset: string[57];
  254.          { name of active subboard list }
  255.  
  256.        ftime: timetype;        { start of xfer time }
  257.        fdisc: char;            { disconnect from external xfer }
  258.  
  259.        fileset: string[60];
  260.          { name of active DIR file list }
  261.  
  262.        invis: boolean;         { Alt-I invisible switch }
  263.        expireaction: byte;     { 0=none, 1=reset access, 2=delete account }
  264.        usesession: boolean;    { Use session time limit? }
  265.        junk: boolean;
  266.  
  267.        UserAnsiMode: AnsiType;   { Ansi type of person running door }
  268.        unused: integer;
  269.        subdoors: boolean;        { Var for doors menu }
  270.  
  271.        Mainmenupath: string[45]; { Main path to menu files }
  272.  
  273.        { Misc. Functionality Security Attributes }
  274.        FwdAttrib: AttribSet;     { Attribs. needed to forward messages }
  275.        ChatAttrib: AttribSet;    { Needed to use internode chatting }
  276.        QuotAttrib: AttribSet;    { Needed to use F4 message quoting }
  277.        PrivateAttach: AttribSet; { Can attach file to private message }
  278.        PublicAttach: AttribSet;  { Can attach file to public message }
  279.  
  280.        More: Array[1..6] of AttribSet;  { Room for more }
  281.  
  282.        UploadDoor: Autodoortype;        { Upload autodoor }
  283.        ExUD: boolean;                   { Execute upload autodoor? }
  284.  
  285.        AnsiDetect: boolean;             { Set if ANSI was auto-detected }
  286.        RipTest: boolean;                { Set if RIP should be tested for }
  287.        RipOn: boolean;                  { Set if RIP is available }
  288.        RipVers: array[1..3] of byte;    { Rip version }
  289.  
  290.        Altmenupath: string[45];         { Alternate path to menu files }
  291.        AttachPath: string[45];          { File attach path }
  292.  
  293.        NoGreeting: boolean;             { If set, disable login greeting }
  294.        MaxFileDescrip: Integer;         { max. size of file descriptions }
  295.        HighAscii: boolean;              { support high ascii chars? }
  296.  
  297.        extra: array[1..597] of byte;
  298.        Subboard_Update: boolean;       { set if SubboardSet variable cleared }
  299.        Protocol_Update: boolean;       { set if proto chart updated for 3.0 }
  300.      end;
  301.  
  302.  
  303. type nodetype = record    { NODES file }
  304.  
  305.        syscalls: longint;      { record 0: total calls to system }
  306.        lastuser: longint;      { record 0: last user on the system }
  307.        lastquote: string[72];  { record 0: quote left by last user }
  308.  
  309.        name: string[25];       { logged user's name }
  310.        id: longint;            { logged user's id }
  311.        stat: byte;             { logged user's chat status }
  312.        savestat: byte;         { saved status from door or ext. proto. }
  313.  
  314.        extra: string[14];      { pad to 128 bytes }
  315.  
  316.      end;
  317.  
  318.  
  319. type chattype = record      { CHAT.BBS file }
  320.  
  321.        head,tail: byte;          { head, tail of msg queue }
  322.        msg: array[0..chatsize]   { up to four messages }
  323.          of msgtype;
  324.  
  325.      end;
  326.  
  327.  
  328.  
  329. { -- USER file ----------------------------------------------------------- }
  330.  
  331. type UserHeader = record       { file header info }
  332.        root: TreeRootType;       { tree root info }
  333.  
  334.        { Netmail Fields }
  335.        Origin: array[1..5]
  336.          of FidoAddressType;   { primary & alternate addresses }
  337.  
  338.        BadMail: string[25];    { Where to send bad messages }
  339.  
  340.        originate,
  341.        reply,
  342.        unlisted,
  343.        crash,
  344.        routeedit: Attribset;   { Netmail function security attributes }
  345.  
  346.        SysopName: string[25];  { Sysop's real name }
  347.  
  348.        pad: array[1..4] of byte;
  349.      end;
  350.  
  351.  
  352.      Usertype = record
  353.        Leaf: TreeLeafType;     { tree leaf info }
  354.  
  355.        name: string[25];       { user's real name }
  356.        alias: string[25];      { user's alias name }
  357.        passwd: pwtype;         { password }
  358.        cksum: integer;         { checksum of name }
  359.  
  360.        firston: datetype;      { date of first logon }
  361.        laston: datetype;       { date of last logon }
  362.        lasttime: timetype;     { time of last logon }
  363.        calls: longint;         { total number of calls }
  364.  
  365.        location: string[20];   { user's location }
  366.        systype: string[15];    { system type }
  367.        phoneno: string[12];    { phone number }
  368.        pref: attribset;        { user preference attributes }
  369.        NoSubPrompt,
  370.        NoMsgPrompt: boolean;   { display subboard/mail disposition prompts? }
  371.        LastMailDate: datetype; { date specified in last mail list/inquire }
  372.  
  373.        NetAddr: AddressType;   { netmail routing address }
  374.        InProto: ProtocolType;  { protocol for internal xfers }
  375.        subboard: string[8];    { current or last used subboard }
  376.  
  377.        fproto: byte;           { default file xfer protocol }
  378.        logmail: maillogtype;   { log mail sent/rcv'd }
  379.        scrnsize: byte;         { screen size (0=continuous scroll) }
  380.        help: helplevel;        { help level }
  381.        ansimode: ansitype;     { default ANSI mode }
  382.  
  383.        access: accesstype;     { access & time limits }
  384.        timeleft: integer;      { time left today }
  385.  
  386.        uploads: longint;       { Kbytes uploaded }
  387.        ulcount: longint;       { File upload count }
  388.        downloads: longint;     { Kbytes downloaded }
  389.        dlcount: longint;       { File download count }
  390.  
  391.        listformat: byte;       { file list format prompt/short/long }
  392.        msgpause: byte;         { msg pause default prompt/yes/no }
  393.  
  394.        { QWK Data }
  395.        QWKProtocol: byte;      { Protocol: 0=Zmodem 1=Ymodem 2=Xmodem }
  396.        QWKArchiveType: byte;   { Archiver: 0=ZIP }
  397.        QWKPacketNum: byte;     { Packet Number }
  398.        QWKName: byte;          { Naming Convention: 0=Suffix 1=Prefix }
  399.        QWKIndexes: byte;       { Generate Indexes: 0=Yes 1=No }
  400.        QWKFromYou: byte;       { DL Mail from you: 0=Yes 1=No }
  401.        QWKMarkNew: byte;       { Mark new messages as read: 0=Yes 1=No }
  402.        QWKPacketType: byte;    { Packet type: 0=QWK 1=Text }
  403.  
  404.        pad: array[1..10] of byte;   { pad to 256 bytes }
  405.      end;
  406.  
  407.  
  408. { -- Setup Files ------------------------------------------------------------ }
  409.  
  410. type SetupHeader = record
  411.        root: TreeRootType;       { tree root info }
  412.        pad: string[116];         { header for subboard SETUP files }
  413.      end;
  414.  
  415.      SetupData = record             { data for SETUP files }
  416.        Leaf: TreeLeafType;     { tree leaf info }
  417.        name: string[8];        { eight-char item name }
  418.        path: string[40];       { path to HDR/DIR file }
  419.        descrip: string[40];    { name of subboard/file area }
  420.        access: integer;        { access level required to use }
  421.        attrib: attribset;      { attributes required to read/join }
  422.  
  423.        case integer of
  424.          1: (                { Subboards }
  425.          subsysop: string[25];   { subop's name }
  426.          echomail: boolean;      { echomail attrib for subboards }
  427.          postattrib: attribset;  { attributes required to post }
  428.          visible: boolean;       { subboard visible? }
  429.          pad: string[13]);       { extra bytes }
  430.  
  431.          2: (                { Filedirs }
  432.          filepath: string[38];   { path to upload/download files }
  433.          readonly,
  434.          writeonly: boolean;
  435.          Free: word;
  436.          Value: integer;
  437.          skipscan: boolean);      { skip duplicate file scan? }
  438.  
  439.      end;
  440.  
  441.  
  442.  
  443. { -- Message Files ---------------------------------------------------------- }
  444.  
  445. type SubType = record   { subboard header information }
  446.        access: integer;        { access level required to use subboard }
  447.        attrib: attribset;      { attributes required to read/join }
  448.        name: string[40];       { long sub board name }
  449.        subsysop: string[25];   { sub-sysop's name }
  450.        maxsize: longint;       { maximum number of msgs allowed }
  451.        maxmsglen: integer;     { max. message length }
  452.        anonymous: boolean;     { set if anonymous posts are allowed }
  453.        echomail: boolean;      { set if echomail on this subboard }
  454.        autokill: boolean;      { purge old messages automatically }
  455.        compress: boolean;      { set to compress message texts }
  456.  
  457.        messages: longint;      { number of active headers }
  458.        nextid: longint;        { next MSG ID number }
  459.  
  460.        firstmsg,
  461.        lastmsg: longint;       { first & last active msg by ID # }
  462.  
  463.        orignode: word;         { originating node, for echomail }
  464.        orignet: word;          { originating net, for echomail }
  465.        origzone: word;         { originating zone, for echomail }
  466.        origpoint: word;        { originating point }
  467.  
  468.        userjoin: boolean;      { set if users allowed to join }
  469.        postattrib: attribset;  { attributes required to post msgs }
  470.        visible: boolean;       { false hides subboard from list }
  471.  
  472.        pad: string[14];        { pad to 128 bytes }
  473.  
  474.      end;
  475.  
  476.  
  477.      IndexType = array [SEQ..UID,0..IndexSize-1]
  478.        of longint;           { index for sequential and uid values }
  479.  
  480.  
  481.      HeaderType = record        { message header }
  482.        status: byte;         { 0=header, 255=deleted }
  483.        id: array[SEQ..UID]
  484.          of longint;         { sequential and universal ID numbers }
  485.        next: array[SEQ..UID]
  486.          of longint;         { pointers to next headers if any }
  487.        txt: longint;         { pointer to start of text in text file }
  488.  
  489.        from: string[25];     { text of sender's name }
  490.        fromid: longint;      { sender's user record, if local }
  491.        touser: string[25];   { text of receiver's name }
  492.        toid: longint;        { receiver's user record, if local }
  493.        subj: string[40];     { subject }
  494.  
  495.        time: timetype;       { time recorded }
  496.        date: datetype;       { date recorded }
  497.        rd: longint;          { times read }
  498.        replies: longint;     { times replied-to }
  499.  
  500.        addr: AddressType;    { forward or expanded address info }
  501.        fattach: string[12];  { attached file, if any }
  502.        fretain: boolean;     { if set, don't kill file when message killed }
  503.        extra: string[4];     { extra heading information }
  504.  
  505.        prot: boolean;        { purge protection }
  506.        logged: boolean;      { set if mail logged to disk }
  507.  
  508.        lastseq,
  509.        nextseq: longint;     { next/previous sequential message }
  510.  
  511.        lastthread,
  512.        nextthread: longint;  { next/previous threaded message }
  513.  
  514.        topthread,            { first msg in this thread }
  515.        lastreply,            { last reply to this message }
  516.        replyto: longint;     { message to which this is a direct reply }
  517.  
  518.        lastmail,
  519.        nextmail: longint;    { next/previous personal mail message }
  520.  
  521.        attribute: word;      { echomail flags/attributes }
  522.  
  523.        nextseqrec: longint;  { record # of next sequential msg }
  524.        nextmailrec: longint; { record # of next mail message }
  525.  
  526.        crashmail: boolean;   { set if crash mail }
  527.  
  528.        pad: string[10];   { pad to 256 bytes }
  529.      end;
  530.  
  531.      TextHeader = record     { header info for message file }
  532.        pad: string[127];
  533.      end;
  534.  
  535.      TexType = record        { block of text from text file }
  536.        copies: byte;              { #of copies 255=deleted }
  537.        data: string[blocksize];   { block of text }
  538.        next: longint;             { pointer to next block }
  539.      end;
  540.  
  541.  
  542.      MembHeader = record      { header for member file }
  543.        root: treeroottype;
  544.        pad: string[116];
  545.      end;
  546.  
  547.      MembType = record        { block data for member file }
  548.        Leaf: treeleaftype;
  549.        name: string[25];      { member's name }
  550.        firston: datetype;     { date joined this subboard }
  551.        laston: datetype;      { date last accessed this subboard }
  552.        lastread: longint;     { highest message read }
  553.        firstmail,
  554.        lastmail: longint;     { first/last personal message this subboard }
  555.        pad: string[66];
  556.      end;
  557.  
  558.  
  559. { -- Log and Quotes Files ------------------------------------------------- }
  560.  
  561. type logtype = record  { LOG file }
  562.        head: integer;
  563.        users: array[1..logsize] of record
  564.          id: longint;     { user ID # }
  565.          chksum: integer; { user checksum }
  566.          time: timetype;  { time of login }
  567.          date: datetype;  { date of login }
  568.        end;
  569.      end;
  570.  
  571.      logfiletype = file of logtype;
  572.  
  573.  
  574. type quotehead = record
  575.        head: longint;
  576.        tail: longint;
  577.        pad: string[7];
  578.      end;
  579.  
  580.      quotetype = record
  581.        status: byte;
  582.        name: string[25];    { their name }
  583.        quote: string[72];   { what they said }
  584.        time: timetype;      { when they said it }
  585.        date: datetype;
  586.        pad: string[22];
  587.      end;
  588.  
  589.  
  590.  
  591. { -- File Directories ------------------------------------------------------ }
  592.  
  593. type DirHeader = record    { File directory header info }
  594.        root: treeroottype;     { root information }
  595.  
  596.        access: byte;           { access level required to use directory }
  597.        attrib: attribset;      { attributes required to use/upload }
  598.        name: string[40];       { long directory name }
  599.        visible: boolean;       { directory visible? }
  600.        subsysop: string[25];   { directory subsysop }
  601.  
  602.        filepath: string[45];   { path to files }
  603.        maxsize: word;          { max number of files allowed }
  604.        autokill: boolean;      { auto kill oldest files }
  605.        readonly: boolean;      { read only dir }
  606.        writeonly: boolean;     { write only dir }
  607.        free: longint;          { free files limit }
  608.        value: integer;         { value multiplier }
  609.        dlattrib: attribset;    { attributes required to download }
  610.  
  611.        skipscan: boolean;      { skip duplicate file scan }
  612.        pad: array[1..109] of byte;   { pad to 256 bytes }
  613.      end;
  614.  
  615.  
  616.      DirType = record      { File directory record format }
  617.        leaf: treeleaftype;     { tree/list leaf data }
  618.  
  619.        name: string[12];       { filename }
  620.        descrip: string[40];    { description }
  621.        edescrip: array[1..2]
  622.          of string[60];        { extended description }
  623.        spare: byte;            { spare byte }
  624.        length: longint;        { length in 128-char blocks }
  625.        id: longint;            { ID of uploader }
  626.        cksum: integer;         { checksum of uploader }
  627.        date: datetype;         { date uploaded }
  628.        times: longint;         { # of times downloaded }
  629.        passwd: pwtype;         { password }
  630.        offline: boolean;       { flag if file not available }
  631.  
  632.        EdfTxt: longint;        { pointer to extended description }
  633.  
  634.        pad: array[1..37] of byte;    { pad to 256 bytes }
  635.      end;
  636.  
  637.  
  638.  
  639. (c) Copyright 1993 Searchlight Software
  640.